package br.com.tiespec.ejb.Ejb;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;

import br.com.tiespec.ejb.Dao.PerfilDAO;
import br.com.tiespec.ejb.Dao.UsuarioDAO;
import br.com.tiespec.ejb.EjbInterface.UsuarioInterface;
import br.com.tiespec.model.Enum.TipoSortOrder;
import br.com.tiespec.model.Modelo.Perfil;
import br.com.tiespec.model.Modelo.Usuario;
import br.com.tiespec.model.Util.RNException;

@Stateless(mappedName = "UsuarioImpl")
@Local
public class UsuarioImpl implements UsuarioInterface  {

	private static final long serialVersionUID = 5864679114660688306L;
	
	@EJB UsuarioDAO uDao;
	@EJB PerfilDAO pDao;
	
	@Override
	public List<Usuario> listarUsuario(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder,
			String nome, String email, String cliente) {
		return uDao.listarUsuario(first, pageSize, sortField, sortOrder, nome, email, cliente);
	}

	@Override
	public int countUsuario(String nome, String email, String cliente) {
		return uDao.countUsuario(nome, email, cliente);
	}

	@Override
	public Usuario selecionarUsuario(Long id) {
		return uDao.selecionarUsuario(id);
	}

	@Override
	public Usuario selecionarUsuarioComClienteEPerfil(Long id) {
		return uDao.selecionarUsuarioComClienteEPerfil(id);
	}

	@Override
	public void salvarUsuario(Usuario usuarioInstance) throws RNException {
		try {
			uDao.save(usuarioInstance);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}

	@Override
	public void removerUsuario(Usuario usuarioInstance) throws RNException {
		try {
			uDao.delete(Usuario.class, usuarioInstance.getId());
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}

	@Override
	public List<Perfil> listarPerfil() {
		return pDao.listarPerfilSemAdministrador();
	}

}